package gptma.bo.services.employee;

import gptma.bo.dao.FetchInformation;
import gptma.bo.model.employee.Employee;
import gptma.bo.model.project.Project;
import gptma.bo.model.task.Imputation;
import gptma.bo.model.task.Task;
import gptma.bo.services.cra.ActivityReport;
import gptma.bo.services.exception.DayLimitReachedException;

import java.util.Date;
import java.util.List;

public interface IEmployeeServices {

	List<Employee> findAll();

	Employee findEmployee(String trigram);

	float findConsolidatedCharge(Employee employee, Date date);

	List<Imputation> findImputationsFromDates(Employee employee,
			Date startDate, Date endDate);

	ActivityReport generateActivityReport(Employee employee, int month, int year);

	List<Task> findAssignedTasks(Employee employee);

	List<Task> findAssignedTasks(Employee employee,
			FetchInformation fetchInformation);

	long findAssignedTasksCount(Employee employee);

	List<Project> findManagedProjects(Employee employee);

	void createImputation(Imputation imputation, boolean finished)
			throws DayLimitReachedException;

	int createMassImputation(Imputation template, Date startDate, Date endDate);

	void deleteImputation(Imputation imputation);

}
